A current trend in the computer industry is the interconnection of a cluster of independent computing nodes connected by a high-speed communications link. Each node is associated with a number of domains, where each domain represents a process having its own address space. One such domain is the operating system or kernel that provides a single system image, making the cluster look like a single machine to the user, to applications, and to the network. This single system image allows user and kernel applications to invoke procedures without regard to where the procedures reside within the cluster. Thus, a user application running in one node can invoke an object whose method is located in another node of the cluster without requiring the user application to know the location of the invoked method.
Debugging the kernel in a cluster environment presents a number of challenges. Traditional debugging tools are not suitable since they require that the debugged code be stopped in order to examine data. When the debugged code is the kernel, the kernel will be stopped in order to examine kernel data. All processing in the node ceases when the kernel is stopped. In order to avoid this situation, the debugger needs to execute on a separate node. Often, this additional resource is not available.
In addition, certain kernel procedures can only execute on one node. In order to debug an cluster environment, n nodes or computers will be required. Often, these additional resources are scarce and not readily available.
Accordingly, there needs to be a mechanism that provides an efficient environment in which the cluster environment can be simulated for debugging purposes.